/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DAO;

import BE.PlantillaMarcoReferencia;
import java.util.List;
import  org.hibernate.Query;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

/**
 *
 * @author CarLita
 */
public class PlantillaMarcoReferenciaDao {
    Session session;
    public PlantillaMarcoReferenciaDao(){
        //session = HibernateUtil.getSessionFactory().openSession();
    }

    public PlantillaMarcoReferencia buscarPorId(int id){        
        session = HibernateUtil.getSessionFactory().openSession();
        String hql = "from PlantillaMarcoReferencia plantilla_marco_referencia where plantilla_marco_referencia.idPlantilla= ? ";
        Query query = session.createQuery(hql);
        query.setInteger(0, id);        
        List resultList = null;

        try {            
            session.beginTransaction();
            resultList = query.list();
            session.getTransaction().commit();
            session.close();
            return (PlantillaMarcoReferencia)resultList.get(0);
        } catch (HibernateException he) {
            he.printStackTrace();
        }

        session.close();
        return null;
    }

    public List buscarPorCriterios(PlantillaMarcoReferencia plantilla){
        session = HibernateUtil.getSessionFactory().openSession();
        String nombre = plantilla.getNombre();
        String marcoReferencia = plantilla.getNombreMarcoReferencia();
        String areaEspecializacion = plantilla.getAreaEspecializacion();

        String hql = "from PlantillaMarcoReferencia plantilla_marco_referencia where plantilla_marco_referencia.nombre like concat('%',?,'%') " +
                "and plantilla_marco_referencia.nombreMarcoReferencia like concat('%',?,'%') "+
		"and plantilla_marco_referencia.areaEspecializacion like concat('%',?,'%') ";
        
        Query query = session.createQuery(hql);
        query.setString(0, nombre);
        query.setString(1,marcoReferencia);
        query.setParameter(2, areaEspecializacion);        

        List resultList = null;
        try {            
            session.beginTransaction();
            resultList = query.list();
            session.getTransaction().commit();
            session.close();            
            return resultList;
        } catch (HibernateException he) {
            he.printStackTrace();
        }
        session.close();
        return null;
    }

    public boolean insertar(PlantillaMarcoReferencia plantilla){
        boolean ok =true;
        session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try {
            tx.begin();
            session.saveOrUpdate(plantilla);
            tx.commit();
        } catch (HibernateException he){
            ok = false;
            tx.rollback();
            he.printStackTrace();
        } finally {
            session.close();
        }
        return ok;
    }

    public boolean eliminar(int idMarco){
        boolean ok =true;
        PlantillaMarcoReferencia marcoReferenciaSeleccionado = buscarPorId(idMarco);
        try {
            session = HibernateUtil.getSessionFactory().openSession();
            Transaction tx = session.beginTransaction();
            session.delete(marcoReferenciaSeleccionado);
            tx.commit();
            session.close();
        }
        catch(Exception e){
            ok = false;
            System.out.println(e.getMessage());
        }
        //eliminar enunciados, secciones, papeles de trabajo y el marco de referencia x)

        return ok;
    }

    public boolean buscarPorNombre(String nombre) {
         session = HibernateUtil.getSessionFactory().openSession();
         String hql = "from PlantillaMarcoReferencia plantilla_marco_referencia where plantilla_marco_referencia.nombre like ?";

        Query query = session.createQuery(hql);
        query.setString(0, nombre);

        List resultList = null;
        try {
            session.beginTransaction();
            resultList = query.list();
            session.getTransaction().commit();
            session.close();
            return !resultList.isEmpty();
        } catch (HibernateException he) {
            he.printStackTrace();
        }
        session.close();
        return false;
    }

}
